package com.cskaoyan.javase.oop3._1interface._3example;

import com.cskaoyan.javase.oop3._1interface._3example.model.Goods;
import com.cskaoyan.javase.oop3._1interface._3example.operation.impl.IGoodsOperationImpl;

/**
 * 接口表示规范和标准
 *
 * 我们用一个商品(Goods)的对象数组来模拟数据库
 * 某电商系统后台，前端程序员需要后端程序员，提供接口来完成库存的管理，展示页面。假如前后端商量好，要求：
 * 1.展示全部商品（goods）页面时，将仅装有商品对象的数组返回，前端不提供任何数据。
 *
 * 2.新增商品时，前端提供商品各种参数，后端需要校验ID唯一性，然后将对象插入数组，返回插入结果。（结果返回一个状态码,插入成功返回0，数组满了插入失败返回1,id重复返回2）
 *      注:这个插入不是真正的插入,而是找到一个null的位置插入
 *
 * 3.删除商品时，前端提供商品ID，后端将该商品删除后，返回删除删除结果。（成功返回true，找不到该ID的商品返回false）
 * ....
 *
 * @since 16:38
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        IGoodsOperationImpl operation = new IGoodsOperationImpl();
        Goods[] allGoods = operation.getAllGoods();
        for (Goods goods : allGoods) {
            goods.print();
        }
        System.out.println("-----------------");
        switch (operation.insertGoods(new Goods(5, "罗技G302", 200))) {
            case 0:
                System.out.println("插入成功!");
                printCurrentGoods(operation.getAllGoods());
                break;
            case 1:
                System.out.println("插入失败!数组满了!");
                break;
            case 2:
                System.out.println("id重复!插入失败!");
                break;
        }
        System.out.println("-------------------------------");
        if (operation.deleteGoods(10)) {
            // 删除成功
            System.out.println("删除成功!");
            printCurrentGoods(operation.getAllGoods());
            return;
        }
        System.out.println("删除失败,没有该商品!");
    }

    private static void printCurrentGoods(Goods[] goods) {
        System.out.println("商品列表为:");
        for (Goods good : goods) {
            good.print();
        }
    }
}
